/**
 * 
 */
package com.designpattern.design.factory.factorymethod.order;

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;

import com.designpattern.design.factory.factorymethod.Pizza;

/**
 * 抽象类 创建pizza 具体的逻辑由工厂子类来完成
 * 
 * @author zhangyang
 *
 */
public abstract class OrderPizza {
	/**
	 * 创建抽象方法 传入类型,返回pizza
	 * 
	 * @param orderType
	 * @return Pizza
	 */
	public abstract Pizza createPizza(String orderType);

	/**
	 * 类构造器
	 */
	public OrderPizza() {
		// 在类构造器中使用抽象方法，完成pizza的生成
		Pizza pizza = null;
		String orderType = null;
		do {
			// 传入订购类型是奶酪还是paper
			orderType = getType();
			pizza = createPizza(orderType);
			// 输出制造过程
			pizza.prepare();
			pizza.bake();
			pizza.cut();
			pizza.box();
		} while (true);
	}

	// 写一个方法，可以获取客户希望订购的披萨种类
	private String getType() {
		try {
			BufferedReader strin = new BufferedReader(new InputStreamReader(System.in));
			System.out.println("input pizza 种类:");
			String str = strin.readLine();
			return str;
		} catch (IOException e) {
			e.printStackTrace();
			return "";
		}
	}

}
